﻿using System.Collections.Specialized;

namespace VitCode.Castle.Helper
{
    /// <summary>
    /// 字符为Key Object为Value的集合,
    /// 这个集合避免了Key是String型的时候，使用Hashtable进行大量UnBox和INbox操作而创作，
    /// 对于数据量少于1000以下的，可以使用Hashtable，因为性能并不太明显。
    /// </summary>
    /// <remarks></remarks>
    public class NameObjectDictionary : NameObjectCollectionBase
    {
        /// <summary>
        /// 
        /// </summary>
        public NameObjectDictionary()
        {
        }

        /// <summary>
        /// 加入对象
        /// </summary>
        /// <param name="key">Key</param>
        /// <param name="value">值</param>
        public virtual void Add(string key, object value)
        {
            this.BaseAdd(key, value);
        }

        /// <summary>
        /// 移除Key和关联的对象
        /// </summary>
        /// <param name="key"></param>
        public virtual void Remove(string key)
        {
            this.BaseRemove(key);
        }

        /// <summary>
        /// 清除集合内的对象
        /// </summary>
        public virtual void Clear()
        {
            this.BaseClear();
        }

        /// <summary>
        /// 获取所有Key
        /// </summary>
        public virtual string[] AllKeys
        {
            get { return base.BaseGetAllKeys(); }
        }

        /// <summary>
        /// 获取是否包换这个Key的对象
        /// </summary>
        /// <param name="key"></param>
        /// <returns></returns>
        public virtual bool Contains(string key)
        {
            string[] keys = AllKeys;
            for (int i = 0; i < keys.Length; i++)
            {
                if (keys[i] == key)
                {
                    return true;
                }
            }
            return false;
        }

        /// <summary>
        /// 获取或设置这个集合Key所关联的对象
        /// </summary>
        public virtual object this[string key]
        {
            get { return base.BaseGet(key); }
            set { BaseSet(key, value); }
        }

        /// <summary>
        /// 获取这个集合所带的Value
        /// </summary>
        public virtual object[] Values
        {
            get { return BaseGetAllValues(); }
        }
    }
}
